package be.vdab.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.*;

import be.vdab.entities.Klanten;
import be.vdab.entities.Reservatie;

public class ReservatieDAO {
	private static final String SCHRIJF_RESERVATIE = "Insert into reservaties (klantnr, voorstellingsnr, plaatsen) values (?,?,?)";
	private static final String ZOEK_RESERVATIES = "Select * from reservaties order by reservatienr";
	private static final String UPDATE_PLAATSEN = "update voorstellingen set VrijePlaatsen = VrijePlaatsen - ? where voorstellingsnr = ?";
	private final DatabaseUtil databaseUtil = new DatabaseUtil();
	KlantenDAO klantenDAO = new KlantenDAO();
	VoorstellingDAO voorstellingDAO = VoorstellingDAO.getInstance();
	

	private Reservatie leesReservatie(ResultSet resultSet) throws SQLException{
		return new Reservatie(voorstellingDAO.getVoorstelling(
				resultSet.getLong("VoorstellingsNr")), resultSet.getLong("plaatsen") );
	}

	public void voegReservatieToe(Reservatie reservatie, Klanten klant) {
		Connection connection = null;
		PreparedStatement s1 = null, s2=null;
		try {
			connection = databaseUtil.getConnection();
			connection.setAutoCommit(false);
			s1 = connection.prepareStatement(SCHRIJF_RESERVATIE);
			s1.setLong(1, klant.getKlantNr());
			s1.setLong(2, reservatie.getVoorstelling().getNr());
			s1.setLong(3, reservatie.getPlaatsen());
			s1.executeUpdate();
			s2 = connection.prepareStatement(UPDATE_PLAATSEN);
			s2.setLong(1, reservatie.getPlaatsen());
			s2.setLong(2, reservatie.getVoorstelling().getNr());
			s2.executeUpdate();
			connection.commit();
		} catch (SQLException ex) {
			throw new DAOException("kan reservatie niet wegschrijven" + ex);
		} finally {
			databaseUtil.close(s1, connection);
			databaseUtil.close(s2, connection);
		}
	}
	

	
	private Long resultSetRijNaarNummer(ResultSet resultSet)
			throws SQLException {
		return resultSet.getLong("ReservatieNr");
	}
}
